IEEE 754
浮動小数点数の標準
IEEE 754-2019
https://standards.ieee.org/ieee/754/6210/
有料なんだmrsekut.icon
IEEE 754-2008
https://irem.univ-reunion.fr/IMG/pdf/ieee-754-2008.pdf
1つ古い版は公開されている
5つの基本形式
/mrsekut-book-damepofloat/07
単精度
32bit
倍精度
64bit
四倍精度
128bit
etc.
3つのパラメータで決まる
基数
指数部の最大値
精度
/mrsekut-book-damepofloat/06
例えば、10進数で0.15625を単精度で表現することを考える
2進数に変換すると、$ 1.01 * 2^{-3}なので、以下のように書ける
table:_
符号 +
基数 2
指数 -3
仮数 01
指数部には127のbiasを追加する
$ 124 = -3 + 127
これを2進数に変換すると011111100
これで以下のように表現できる
table:_
符号 (1bit) 0
指数 (8bit) 011111100
仮数 (23bit) 010000 ... 0
https://gyazo.com/9e71b4f8d832732e17440480b4d6dda6 https://ja.wikipedia.org/wiki/IEEE_754
水色が符号
緑が指数
赤が仮数
Web上で遊べるやつ
OpenSiv3D
浮動小数点数内部表現シミュレーター - instant tools
参考
/mrsekut-book-damepofloat/05 (第1章 浮動小数点数の基礎)
IEEE754を噛み砕いて解説していてとても良い
#WIP
https://ushiostarfish.hatenablog.com/entry/2019/08/12/210023
固定小数点数よりも大きな範囲を表現できる
近似値計算なので誤差が生じる
数値 = $ (-1)^\mathrm{符号}*(1.\mathrm{仮数})*\mathrm{基数}^{\mathrm{指数}-\mathrm{bias}}
仮数部の最上位桁を1にすることを正規化と呼ぶ
e.g. $ 0.15*10^{-5}から、$ 1.5*10^{-6}にする
128 = (2^(8-1)-2)
範囲
https://hwb.ecc.u-tokyo.ac.jp/wp/information-2/coding/number/precision/
https://qiita.com/mod_poppo/items/41a09bd40acfceec6ec8
#??
ぱっと範囲を計算する方法
直観的イメージと、計算式、具体例
指数部の符号ってどうやって表現するの
いや、符号ってマイナスで固定か
丸め誤差
打切り誤差
桁落ち
情報落ち
https://hnw.hatenablog.com/entry/2019/02/26/114349
https://qiita.com/mod_poppo/items/3fa4cdc35f9bfb352ad5
https://qiita.com/mod_poppo/items/46d2d3c8eef1d8de1534
浮動小数点数は可換
https://qiita.com/mod_poppo/items/cc2defec4cb778f7f21c
https://ja.m.wikipedia.org/wiki/クラスターミッション
https://qiita.com/y-yoshinari/items/76260f6359d5b4418b33
https://qiita.com/mod_poppo/items/910b5fb9303baf864bf7
https://hiratara.hatenadiary.jp/entry/2022/02/05/164209
https://gcc.gnu.org/wiki/FloatingPointMath
https://docs.oracle.com/cd/E19957-01/806-4847/ncg_goldberg.html
https://blog.miz-ar.info/2022/04/float-to-string/
https://ja.wikipedia.org/wiki/IEEE_754
/mrsekut-book-4297127474/052
ts